home *** CD-ROM | disk | FTP | other *** search
- unit main;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
- Dialogs, DSUtil, StdCtrls, DSPack, DirectShow9, Menus;
-
- type
- TVideoForm = class(TForm)
- FilterGraph: TFilterGraph;
- VideoWindow: TVideoWindow;
- MainMenu1: TMainMenu;
- Devices: TMenuItem;
- Filter: TFilter;
- procedure FormCreate(Sender: TObject);
- procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
- private
- { DΘclarations privΘes }
- public
- { DΘclarations publiques }
- procedure OnSelectDevice(sender: TObject);
- end;
-
- var
- VideoForm: TVideoForm;
- SysDev: TSysDevEnum;
- implementation
-
- {$R *.dfm}
-
- procedure TVideoForm.FormCreate(Sender: TObject);
- var
- i: integer;
- Device: TMenuItem;
- begin
- SysDev:= TSysDevEnum.Create(CLSID_VideoInputDeviceCategory);
- if SysDev.CountFilters > 0 then
- for i := 0 to SysDev.CountFilters - 1 do
- begin
- Device := TMenuItem.Create(Devices);
- Device.Caption := SysDev.Filters[i].FriendlyName;
- Device.Tag := i;
- Device.OnClick := OnSelectDevice;
- Devices.Add(Device);
- end;
- end;
-
- procedure TVideoForm.OnSelectDevice(sender: TObject);
- var
- CaptureGraph: ICaptureGraphBuilder2;
- SourceFilter, DestFilter: IBaseFilter;
- begin
- FilterGraph.ClearGraph;
- FilterGraph.Active := false;
- Filter.BaseFilter.Moniker := SysDev.GetMoniker(TMenuItem(Sender).tag);
- FilterGraph.Active := true;
- FilterGraph.QueryInterface(ICaptureGraphBuilder2, CaptureGraph);
- Filter.QueryInterface(IBaseFilter, SourceFilter);
- VideoWindow.QueryInterface(IBaseFilter, DestFilter);
- CaptureGraph.RenderStream(nil, nil, SourceFilter, nil, DestFilter);
- FilterGraph.Play;
- CaptureGraph := nil;
- SourceFilter := nil;
- DestFilter := nil;
- end;
-
- procedure TVideoForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
- begin
- SysDev.Free;
- FilterGraph.ClearGraph;
- FilterGraph.Active := false;
- end;
-
- end.
-